package com.example.interview.algorithm;

import java.util.Stack;

/**
 * 输入个链表的头结点，从尾到头反过来打印出每个结点的值。
 * 
 * @Description: TODO
 * @author gaobing
 * @date 2018年9月27日 下午5:07:03 思路：可以考虑用栈实现
 */
public class Test06ListNode {

	// https://www.cnblogs.com/ysocean/p/7928988.html
	public static class ListNode {
		int val;// 结点的值
		ListNode nxt;// 下一个节点
	}

	/**
	 * 输入个链表的头结点，从尾到头反过来打印出每个结点的值 
	 * @param root 链表头节点 使用栈的方式进行
	 */
	private static void printListInverselyUsingIteration(ListNode root) {
		Stack<ListNode> stack = new Stack<>();
		while (root != null) {
			stack.push(root);
			root = root.nxt;
		}

		while (!stack.isEmpty()) {

			System.out.println(stack.pop().val);
		}
	}

	public static void main(String[] args) {
		ListNode root = new ListNode();
		root.val = 1;
		root.nxt = new ListNode();

		root.nxt.val = 2;
		root.nxt.nxt = new ListNode();

		root.nxt.nxt.val = 3;
		root.nxt.nxt.nxt = new ListNode();

		root.nxt.nxt.nxt.val = 4;
		root.nxt.nxt.nxt.nxt = new ListNode();

		root.nxt.nxt.nxt.nxt.val = 5;

		printListInverselyUsingIteration(root);

	}

}
